查看原文
其他

replace命令的“加强版”!——如何使用ereplace,结合egen

爬虫俱乐部 Stata and Python数据分析 2023-10-24

本文作者:陈梦鹭 河南大学经济学院

本文编辑:管文娜

技术总编:郭泽源

Stata and Python 数据分析

爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~



1.导读

在Stata中,ereplace命令常用于替换数值型和文字型变量。而replace是Stata中的一个基本命令,用于替换数据集中的一个或多个变量的值,该命令通常用于修改数值变量,但也可以用于修改字符串变量。那他们究竟有什么不同呢?

2.命令介绍

Stata中的ereplace 命令是replace命令的一种扩展,用于执行基于正则表达式的替换操作。正则表达式是一种强大的字符串匹配工具,它允许用户根据特定的模式来查找和替换文本

ereplace命令的由来可以追溯到Stata 9版本,当时Stata Corp公司为了提供更强大的字符串处理功能,添加了对正则表达式的支持。在此之前,Stata只能使用普通的字符串匹配和替换操作。

ereplace 命令的名称中的"e"代表"extended",表示该命令是Stata中一些扩展命令的一部分,这些命令提供了比标准命令更多的功能。除了ereplace命令,Stata还提供了其他扩展命令,如 egen。在此之前,Stata已经提供了replace命令,用于替换数值和字符串变量的值。然而,replace命令只能进行精确匹配,无法使用正则表达式进行匹配和替换。

ereplace命令的引入,为Stata用户在数据清理和文本处理方面提供了更多的工具和灵活性,有助于提高数据处理和分析的效率和精度。

2.1 ereplace命令的安装

在stata对话框中输入ssc install ereplace进行安装,完成安装以后,可以输入help ereplace查看使用方法。

clear allssc install ereplacehelp ereplace2.2 ereplace基本语法
ereplace [type] varname = fcn(arguments) [if exp] [in range] [, options]

egen命令中运算函数fcn运算对象arguments根据使用频率可以分为三类:1. 变量(varlist);2. 表达式 (expression);3.数列(numlist)

3.实例操作

本部分将通过介绍gen 、replace命令和egen、ereplace命令进行对比。

3.1 gen和replace的使用
webuse genxmpl1, clearreplace age2 = age^2

第一张为原始数据;第二张为操作后的数据



webuse genxmpl1, clear是Stata中用于加载一个名为genxmpl1的示例数据集的命令。这个数据集包含了一些虚构的人口统计信息,例如年龄、性别、教育水平等。

replace age2 = age^2的意思是,将数据集中变量age2的值替换为变量age的平方。具体来说,这个命令将计算每个观测值的age变量的平方,并将结果存储在新的变量age2中。如果age变量原本有缺失值,那么对应的age2值也将是缺失值。

3.2 egen和ereplace的使用
sysuse e_exampleereplace percent = cut(percent), at(0(20)100) //using cut() function from egen

第一张为原始数据;第二张为操作后的数据

它使用了egen命令中的 cut()函数来将一个连续的数值变量切割为几个离散的区间,并将原始变量替换为对应的区间类别值。

具体来说,cut() 函数用于将数值变量切割为指定的离散区间。在这个语句中 cut() 函数用于将 "percent" 变量分为5个等距区间(0到20,20到40,40到60,60到80,80到100),并将每个区间分配一个整数值(1到5)表示区间类别。

然后,ereplace函数将原始变量 "percent" 替换为对应的区间类别值,即将区间0到20替换为1,20到40替换为2,以此类推。由于 ereplace 函数可以在替换变量的同时保留原始变量的标签和标记,因此可以更好地记录数据的变化。

需要注意的是,"at(0(20)100)" 是在 cut() 函数中指定的区间端点。在这个例子中,"0(20)100"表示将区间从0开始,以20为间隔,一直到100。这样就可以将"percent"变量平均分为5个区间。如果不指定"at()"选项,则cut() 函数将自动根据变量的最小值和最大值选择区间端点。

另外,egen是一个非常强大的命令,它包含了很多数据处理函数,如sieve()、cut()等,可以对数据进行处理和分析,方便用户进行数据操作。

4.总结

在Stata中,replaceereplace命令都可以用来替换数据集中的某个变量的值。二者的主要区别在于ereplace命令可以使用正则表达式来匹配需要替换的数据,因此可以实现更加灵活的替换操作。

具体来说,replace命令只能用来替换精确匹配的数据值。例如,如果要将数据集中变量x中所有值为1的观测替换为 10,可以使用以下命令:

replace x = 10 if x == 1

这个命令会将x变量中所有值为1的观测替换为10。但是,如果数据集中存在像1.0、1.00等等不同形式的值,那么这些观测不会被替换。

相比之下,ereplace命令则可以使用正则表达式来模糊匹配需要替换的数据值。例如,如果要将数据集中变量x中所有以1开头的观测值替换为10,可以使用以下命令:

ereplace x = 10 if regexm(x, "^1")

这个命令使用正则表达式 ^1 匹配了所有以1开头的观测值,并将它们替换为10。需要注意的是,ereplace命令使用正则表达式进行模糊匹配,因此可能会误操作,应该谨慎使用。

以上便是本次的命令介绍!

END

重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!







往期推文推荐XML 轻松读取:用 Python 发现数据宝藏

爬虫俱乐部重磅推出cnstata.com.cn

Markdown:让数学公式输入更方便!

处理日期的好手:pendulum
定制属于自己的“贾维斯”——Python调用Chat
学会format,数据格式任你拿捏【Python实战】游客最青睐的城市,你的家乡上榜了吗?

What’ new ? 速通Stata 18

【爬虫实战】Python爬取美食菜谱揭秘网络中心人物,你会是其中之一吗?考研之后,文科生需以“do”躬“do”!焕新升级!轻松获取港股、权证的历史交易数据爬虫俱乐部的精彩答疑---cntraveltime【爬虫俱乐部新命令速递】在Stata中与ChatGPT对话

用`fs`命令批量获取文件夹和不同文件夹下的excel文件

自然语言处理之实例应用

JSON帮手,FeHelper

最新、最热门的命令这里都有!

Python实现微信自动回复     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存